package com.maventools.utils;

import com.maventools.config.DownloadConfig;
import com.maventools.domain.Maven;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 展示工具类
 */
@Component
public class MavenVersionConverter {
    @Autowired
    private DownloadConfig downloadConfig;

    /**
     * @param mavenList
     * @throws Exception
     * @Description: maven下载版本展示
     */
    public void categorizeAndPrintVersions(List<Maven> mavenList) throws Exception {
        List<String> versions = mavenList.stream()
                .map(Maven::getVersion) // 获取 Maven 对象的版本号
                .toList(); // 将版本号收集到 List 中

        List<String> currentVersions = new ArrayList<>();
        List<String> ltsVersions = new ArrayList<>();
        List<String> oldStableVersions = new ArrayList<>();
        List<String> oldUnstableVersions = new ArrayList<>();

        for (String version : versions) {
            if (isLTS(version)) {
                ltsVersions.add(version);
            } else if (isCurrent(version)) {
                currentVersions.add(version);
            } else if (isOldStable(version)) {
                oldStableVersions.add(version);
            } else {
                oldUnstableVersions.add(version);
            }
        }
        int len = Math.min(Math.min(currentVersions.size(), ltsVersions.size()),
                Math.min(oldStableVersions.size(), oldUnstableVersions.size()));
        // 确保每个列表都有 20 个元素，不足的使用空字符串填充
        fillList(currentVersions, len);
        fillList(ltsVersions, len);
        fillList(oldStableVersions, len);
        fillList(oldUnstableVersions, len);
        // 打印表头
        System.out.println("|     CURRENT      |       LTS        |    OLD STABLE    |   OLD UNSTABLE   |");
        System.out.println("|------------------|------------------|------------------|------------------|");

        // 打印数据
        for (int i = len - 1; i > 0; i--) {
            System.out.printf("| %-16s | %-16s | %-16s | %-16s |\n",
                    currentVersions.get(i),
                    ltsVersions.get(i),
                    oldStableVersions.get(i),
                    oldUnstableVersions.get(i));
        }
        System.out.println("This is a partial list. For a complete list, visit https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/");
    }


    /**
     * @param version
     * @return true 当前版本
     * @Descrption:maven版本展示辅助方法-----获取Current版本
     */
    private boolean isCurrent(String version) {
        // Maven 4.X 通常是current版本
        return version.startsWith("4.0");
    }

    /**
     * @param version
     * @return true  长期支持版本
     * @Descrption:maven版本展示辅助方法-----获取LTS版本
     */
    private boolean isLTS(String version) {
        // Maven 3.8.x, 3.9.x 通常是LTS版本
        return version.startsWith("3.9") || version.startsWith("3.8");
    }

    /**
     * @param version
     * @return true  旧稳定版
     * @Descrption:maven版本展示辅助方法-----获取OldStable版本
     */
    private boolean isOldStable(String version) {
        // 根据实际情况修改Old Stable版本的判断逻辑
        // 稳定的GA版本，且不是最新的大版本，这里简化判断，可以根据实际情况调整
        // 这里假设3.0-3.6之间的版本是oldStable
        return version.startsWith("3.0") || version.startsWith("3.1") || version.startsWith("3.2") || version.startsWith("3.3") || version.startsWith("3.5") || version.startsWith("3.6") && !isPreRelease(version);
    }


    //稳定？测试？判断方法
    private boolean isPreRelease(String version) {
        return version.contains("alpha") || version.contains("beta") || version.contains("rc");
    }

    // 填充列表，确保列表长度为指定长度
    private void fillList(List<String> list, int size) {
        while (list.size() < size) {
            list.add(" "); // 使用空格填充
        }
    }

    /**
     * 获取当前安装版本
     * 扫描安装文件夹获取版本
     */
    public List<String> getInstallVersions() {
        File dir = new File(downloadConfig.getTargetURL());
        File[] files = dir.listFiles();
        List<String> versions = new ArrayList<String>();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    versions.add(file.getName().replace("apache-maven-", ""));
                }
            }
        } else {
            System.out.println("The directory does not exist or is not readable.");
        }
        return versions;
    }
}
